package LeetCode刷题;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-09-30 14:38
 * @description: Functions of this class is
 **/
public class 螺旋矩阵 {
    //贪吃蛇走圈圈遍历嘛，就是
    public static void main(String arg[]) {
        System.out.println(spiralOrder(new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12}}));
    }
    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ans = new ArrayList<>();
        boolean vis[][] = new boolean[10][10];
        int n = matrix.length;
        int m = matrix[0].length;
        int tot = n * m;
        int num = 1;
        int i = 0;
        int j = 0;
        vis[0][0] = true;
        ans.add(matrix[0][0]);
        while (num < tot) {
            //从左往右走行 如果下一个位置没有越界同时没有被走过的话
            while (j + 1 < m && !vis[i][j + 1] && num <= tot) {
                vis[i][j + 1] = true;
                ans.add(matrix[i][++j]);
                num++;
            }
            //从上往下走列 如果下一个位置没有越界同时没有被走过的话
            while (i + 1 < n && !vis[i + 1][j] && num <= tot) {
                vis[i + 1][j] = true;
                ans.add(matrix[++i][j]);
                num++;
            }
            //从右往左走行 如果下一个位置没有越界同时没有被走过的话
            while (j - 1 >= 0 && !vis[i][j - 1] && num <= tot) {
                vis[i][j - 1] = true;
                ans.add(matrix[i][--j]);
                num++;
            }
            //从下往上走列 如果下一个位置没有越界同时没有被走过的话
            while (i - 1 >= 0 && !vis[i - 1][j] && num <= tot) {
                vis[i - 1][j] = true;
                ans.add(matrix[--i][j]);
                num++;
            }
        }
        return ans;
    }
}